//
//  WmcPhotoPreviewDelegate.swift
//  YPWatermarkCamera
//
//  Created by 马涛 on 2022/7/4.
//

import Foundation
import UIKit
import YPGraphicEngine

// MARK: - [WmcPhotoPreviewDelegate]

public protocol WmcPhotoPreviewDelegate: NSObjectProtocol {
    // MARK: 顶部

    /// 导航标题设置
    ///   - attribute: 当前水印相机的属性
    /// - Returns: 自定义设置的富文本标题
    func settingAttributedTitle(_ attribute: WmcAttribute)
        -> NSAttributedString?

    // MARK: 底部

    /// 底部工具栏左侧的按钮列表设置
    /// - Parameters:
    ///   - attribute: 当前水印相机的属性
    ///   - isTransparent: 背景是否透明
    ///   - defaultList: 默认的Item列表
    /// - Returns: 自定义设置后的Item列表
    func toolLeftMenuList(_ attribute: WmcAttribute,
                          isTransparent: Bool,
                          defaultList: [WmcButtonItemType.PreviewFooter])
        -> [WmcButtonItemType.PreviewFooter]

    /// 底部工具栏中间的按钮设置
    /// - Parameters:
    ///   - attribute: 当前水印相机的属性
    ///   - isTransparent: 背景是否透明
    ///   - defaultList: 默认的Item按钮
    /// - Returns: 自定义设置后的按钮
    func toolCenterMenuItem(_ attribute: WmcAttribute,
                            isTransparent: Bool,
                            defaultItem: WmcButtonItemType.PreviewCenter)
        -> WmcButtonItemType.PreviewCenter

    /// 底部工具栏右侧的按钮列表设置
    /// - Parameters:
    ///   - attribute: 当前水印相机的属性
    ///   - isTransparent: 背景是否透明
    ///   - defalultList: 默认的Item列表
    func toolRightMenuList(_ attribute: WmcAttribute,
                           isTransparent: Bool,
                           defaultList: [WmcButtonItemType.PreviewFooter])
        -> [WmcButtonItemType.PreviewFooter]

    // MARK: 事务相关

    /// 水印即将进行编辑
    /// 选择对于此事件进行处理的方式
    /// - Parameters:
    ///   - attribute: 当前水印相机的属性
    ///   - watermarkModel: 编辑的水印模型
    /// - Returns: 事件处理方式
    func watermarkWillEdit(_ attribute: WmcAttribute,
                           watermarkModel: WmcWatermarkDetailModel)
        -> WmcActionType

    /// 用户是否可交互、编辑、替换水印
    ///
    ///     指的是水印可以继续拖动、点击进入编辑、以及进行水印切换等操作
    ///     返回false之后，水印将直接渲染在该页面上
    /// - Parameter attribute: 当前水印相机的属性
    /// - Returns: true可编辑替换，false不可编辑替换
    func watermarkInteractionEnabled(_ attribute: WmcAttribute)
        -> Bool

    /// 照片处理完成回调
    /// - Parameters:
    ///   - attribute: 当前水印相机的属性
    ///   - photoResult: 照片结果，包含 水印照片、标准照片和水印信息
    func photoDisposeComplete(_ attribute: WmcAttribute,
                              photoResult: YPWmcManager.PhotoResult)
}

// MARK: - 驱动方法

public extension WmcPhotoPreviewDelegate {
    /// 混合渲染图片
    ///
    ///     在调用此方法之后，会调用photoDisposeComplete回调
    func wmc_blendPhoto() {
        YPWmcDrivingManager.shared.photoPreview_blendPhotoBlock?()
    }

    /// 保存图片到本地相册
    /// - Parameter photoResult: 照片结果
    func wmc_savePhotoToLocalAlbum(photoResult: YPWmcManager.PhotoResult) {
        YPWmcDrivingManager.shared.photoPreview_savePhotoToLocalAlbumBlock?(photoResult)
    }
}

// MARK: - =========================⚠️以下对接业务方无需查看或了解⚠️=========================

// MARK: 可选方法

public extension WmcPhotoPreviewDelegate {
    // MARK: 顶部

    /// 导航标题设置
    func settingAttributedTitle(_ attribute: WmcAttribute) -> NSAttributedString? {
        return nil
    }

    // MARK: 底部

    /// 底部工具栏左侧的按钮列表设置
    func toolLeftMenuList(_ attribute: WmcAttribute,
                          isTransparent: Bool,
                          defaultList: [WmcButtonItemType.PreviewFooter]) -> [WmcButtonItemType.PreviewFooter]
    {
        return []
    }

    /// 底部工具栏中间的按钮设置
    func toolCenterMenuItem(_ attribute: WmcAttribute,
                            isTransparent: Bool,
                            defaultItem: WmcButtonItemType.PreviewCenter) -> WmcButtonItemType.PreviewCenter
    {
        return .default
    }

    /// 底部工具栏右侧的按钮列表设置
    func toolRightMenuList(_ attribute: WmcAttribute,
                           isTransparent: Bool,
                           defaultList: [WmcButtonItemType.PreviewFooter]) -> [WmcButtonItemType.PreviewFooter]
    {
        return []
    }

    // MARK: 事务相关

    /// 水印即将进行编辑
    func watermarkWillEdit(_ attribute: WmcAttribute,
                           watermarkModel: WmcWatermarkDetailModel) -> WmcActionType
    {
        return .default
    }

    /// 用户是否可交互、编辑、替换水印
    func watermarkInteractionEnabled(_ attribute: WmcAttribute) -> Bool {
        return true
    }

    /// 照片处理完成回调
    func photoDisposeComplete(_ attribute: WmcAttribute,
                              photoResult: YPWmcManager.PhotoResult) {}
}
